package designPattern.obsever.moreShowType
{
	import designPattern.obsever.baseObserver.ConcreteSubject;
	import designPattern.obsever.baseObserver.IObserver;
	import designPattern.obsever.baseObserver.ISubject;

	public class ObserverMainClassMoreShow
	{
		/**
		 *特征：
		 * 保证所有订阅过订阅者的观察者都同时得到同等的更新(属性一致)
		 *用处：
		 * 如果应用程序中将许多关键的状态发布给不同的实例，就可以考虑采用观察者模式，特别是采用不同
		 * 形式显示数据要保持一致性，采用观察者模式的好处更为明显。应用观察者模式不会采用不同的数据源
		 * 发送同一个状态信息。
		 *组成结构：
		 * 一个订阅者接口ISubject
		 * 一个观察者接口IObserver
		 * 一个具体的订阅者类ConcreteSunbect
		 * 一个具体的观察者类Observer_A
		 * 多个具体的观察者类的实例
		 * 
		 *本例中可以改进后实现自动订阅：
		 * 方法：使Observer_A持有ConcreteSubject的引用，即将ConcreteSubject的对象subject
		 * 传入Observer_A的构造函数中，并在构造函数中执行concreteSubject.subscribeObserver(this);
		 */		
		public function ObserverMainClassMoreShow()
		{
			var subject:ISubject = new ConcreteSubject();
			
			var obs_a:IObserver = new Observer_MoreShow_A("More Show A");
			var obs_b:IObserver = new Observer_MoreShow_B("More Show B");
			
			subject.subscribeObserver(obs_a);
			subject.subscribeObserver(obs_b);
			
			(subject as ConcreteSubject).setAttr("more show example", 3453);
		}
	}
}